package sdk

// 批量获取订单请求
type OrderFindOrdersRequest struct {
	*BaseRequest
	ConsignCode string `json:"consignCode,omitempty"` // 履约单号: 单独回传履约单号时即可查询单个履约单信息, 不必传时间信息
	Status      int    `json:"status,omitempty"`      // 订单状态: 可选, 100=待发货, 200=已发货, 300=无需发货
	StartTime   string `json:"startTime,omitempty"`   // 付款起始时间: 必须, 例如:2018-12-15 00:00:00
	EndTime     string `json:"endTime,omitempty"`     // 付款结束时间: 必须, 例如:2018-12-17 00:00:00
	Page        int    `json:"page,omitempty"`        // 页码: 可选, 不传默认值=1
	PageSize    int    `json:"pageSize,omitempty"`    // 每页数量: 可选, 不传默认值=100, 最大值=100
}

//
func (request *OrderFindOrdersRequest) GetMethod() (method string) {
	return "/order/findOrders"
}

//
func CreateOrderFindOrdersRequest() (request *OrderFindOrdersRequest) {
	request = &OrderFindOrdersRequest{
		BaseRequest: &BaseRequest{},
	}
	return
}

// 批量获取订单响应
type OrderFindOrdersResponse struct {
	*BaseResponse
	Data OrderFindOrdersData `json:"data"`
}

//
type OrderFindOrdersData struct {
	Rows  []OrderFindOrdersRow `json:"rows"`  // 履约单列表
	Total int                  `json:"total"` // 履约单数量
}

//
type OrderFindOrdersRow struct {
	ShopOrderId      int64          `json:"shopOrderId"`      // 店铺订单id
	ConsignCode      string         `json:"consignCode"`      // 履约单号
	Status           int            `json:"status"`           // 发货单状态: 100=待发货, 200=已发货, 210=已签收, 300=无需发货
	StatusDesc       string         `json:"statusDesc"`       // 发货单状态描述
	FreezeStatus     int            `json:"freezeStatus"`     // 冻结状态: 1=未冻结, 2=已冻结 (买家发起退款后, 状态变为已冻结, 此部分数据是否发货, 需要重点关注. 退款完结后, 冻结状态恢复)
	FreezeStatusDesc string         `json:"freezeStatusDesc"` // 冻结状态描述
	PayTime          int            `json:"payTime"`          // 支付时间
	CreateTime       int            `json:"createTime"`       // 创建时间
	PayChannel       string         `json:"payChannel"`       // 支付渠道
	TradeNo          string         `json:"tradeNo"`          // 支付交易号
	BuyerComment     string         `json:"buyerComment"`     // 买家备注
	SellerComment    string         `json:"sellerComment"`    // 卖家备注
	ShipAddress      ShipAddress    `json:"shipAddress"`      // 收货人信息
	OrderSkuList     []OrderSkuItem `json:"orderSkuList"`     // 履约单下的 sku
	PackageList      []PackageItem  `json:"packageList"`      // 履约单下的包裹
}

//
type ShipAddress struct {
	ShipToName     string        `json:"shipToName"`              // 收货方姓名
	ShipToMobile   string        `json:"shipToMobile"`            // 收货方手机号
	ShipToZip      string        `json:"shipToZip"`               // 收货方地址邮编
	ShipToProvince string        `json:"shipToProvince"`          // 收货方地址省份: 直辖市省市相同
	ShipToCity     string        `json:"shipToCity"`              // 收货方地址市: 直辖市省市相同
	ShipToDistrict string        `json:"shipToDistrict"`          // 收货方地址行政区: 市/县级行政区
	ShipToTown     string        `json:"shipToTown"`              // 收货方地址镇: 市级行政区对应街道/县级行政区对应城镇收货城市编码
	ShipToAddress  string        `json:"shipToAddress"`           // 收货方详细收货地址: 街道, 小区, 门牌号收货地区
	Certification  Certification `json:"certification,omitempty"` // 实名认证信息
}

//
type Certification struct {
	IdCardNO     string `json:"idCardNO"`     // 身份证号码
	IdCardName   string `json:"idCardName"`   // 身份证姓名
	PositiveUrl  string `json:"positiveUrl"`  // 身份证正面照片(图片url)
	OtherSideUrl string `json:"otherSideUrl"` // 身份证反面照片(图片url)
}

//
type OrderSkuItem struct {
	SkuTitle                string `json:"skuTitle"`                // 商品名称
	DeliverCode             string `json:"deliverCode"`             // 发货编码
	Quantity                int    `json:"quantity"`                // 需要发货数量: (若全部退款, 可能为0)
	Price                   int64  `json:"price"`                   // 售价: 商品原价 (单位: 分)
	ShipExpenseShare        int64  `json:"shipExpenseShare"`        // 运费: 商品级订单分摊到的运费值 (单位: 分)
	ShopPromotionAmount     int64  `json:"shopPromotionAmount"`     // 店铺优惠金额: 商品级订单店铺优惠总金额 (满减, 优惠券) (单位: 分)
	AcrossPromotionAmount   int64  `json:"acrossPromotionAmount"`   // 跨店优惠金额 (单位: 分)
	PlatformPromotionAmount int64  `json:"platformPromotionAmount"` // 平台优惠金额: 商品级订单平台优惠总金额 (G币, 优惠券, 会员优惠) (单位: 分)
	PayPrice                int64  `json:"payPrice"`                // 支付金额 (单位: 分)
	ActualIncomePrice       int64  `json:"actualIncomePrice"`       // 实收金额 (单位: 分)
	SkuProProperty          string `json:"skuProProperty"`          // sku 属性
}

//
type PackageItem struct {
	LogisticsChannel string `json:"logisticsChannel,omitempty"` // 物流公司
	LogisticsNumber  string `json:"logisticsNumber"`            // 物流编号
	Status           int    `json:"status,omitempty"`           // 包裹状态: 100=初始化, 110=首次揽件, 120=已签收
	statusDesc       string `json:"statusDesc,omitempty"`       //包裹状态描述
}

// 批量获取订单
func (client *Client) OrderFindOrders(request *OrderFindOrdersRequest) (response *OrderFindOrdersResponse, err error) {
	response = &OrderFindOrdersResponse{
		BaseResponse: &BaseResponse{},
	}
	err = client.DoAction(request, response)
	return
}
